﻿using System.Collections.Generic;
using CTS.Com.Domain.Constants;
using CTS.Com.Domain.Helper;
using CTS.Data.APStorageFiles.Domain.Utils;
using CTS.W._150101.Models.Domain.Common.Constants;
using CTS.W._150101.Models.Domain.Dao.Client;
using CTS.W._150101.Models.Domain.Model.Client.Index;
using CTS.W._150101.Models.Domain.Object.Client;

namespace CTS.W._150101.Models.Domain.Logic.Client.Index
{
    /// <summary>
    /// InitLogic
    /// </summary>
    public class InitLogic
    {
        #region Execute Method
        /// <summary>
        /// Xử lý init.
        /// </summary>
        /// <param name="inputObject">DataModel</param>
        /// <returns>DataModel</returns>
        public InitDataModel Execute(InitDataModel inputObject)
        {
            // Kiểm tra thông tin
            Check(inputObject);
            // Lấy thông tin
            var resultObject = GetInfo(inputObject);
            // Kết quả trả về
            return resultObject;
        }
        #endregion

        #region Private Method
        /// <summary>
        /// Kiểm tra thông tin.
        /// </summary>
        /// <param name="inputObject">DataModel</param>
        private void Check(InitDataModel inputObject)
        {
        }

        /// <summary>
        /// Lấy thông tin.
        /// </summary>
        /// <param name="inputObject">DataModel</param>
        /// <returns>DataModel</returns>
        private InitDataModel GetInfo(InitDataModel inputObject)
        {
            // Khởi tạo biến cục bộ
            var getResult = new InitDataModel();
            // Map dữ liệu
            DataHelper.CopyObject(inputObject, getResult);
            // Lấy danh sách slide
            var listSlides = GetListSlides();
            // Lấy danh sách sản phẩm mới
            var listNewItems = GetListNewItems();
            // Gán giá trị trả về
            getResult.ListSlides = listSlides;
            getResult.ListNewItems = listNewItems;
            // Kết quả trả về
            return getResult;
        }

        /// <summary>
        /// Lấy danh sách slide
        /// </summary>
        private IList<SlideObject> GetListSlides()
        {
            // Khởi tạo biến cục bộ
            var listResult = new List<SlideObject>();
            var processDao = new IndexDao();
            var storageFileCom = new StorageFileCom();
            // Lấy danh sách slide
            var listSlides = processDao.GetListSlides();
            // Khai báo biến dùng trong loop
            SlideObject info = null;
            // Duyệt danh sách slide
            foreach (var slide in listSlides) {
                // Khởi tạo đối tượng slide
                info = new SlideObject();
                // Gán giá trị vào đối tượng slide
                info.SlideCd = slide.SlideCd;
                info.SlideName = slide.SlideName;
                info.SlideUrl = storageFileCom.GetFileName(
                    Logics.LOCALE_DEFAULT,
                    slide.FileCd,
                    false);
                // Thêm vào đối tượng kết quả
                listResult.Add(info);
            }
            // Kết quả trả về
            return listResult;
        }

        /// <summary>
        /// Lấy danh sách sản phẩm mới
        /// </summary>
        private IList<ItemObject> GetListNewItems()
        {
            // Khởi tạo biến cục bộ
            var listResult = new List<ItemObject>();
            var processDao = new IndexDao();
            var storageFileCom = new StorageFileCom();
            // Lấy danh sách sản phẩm mới
            var listNewItems = processDao.GetListNewItems();
            // Khai báo biến dùng trong loop
            ItemObject info = null;
            // Duyệt danh sách sản phẩm mới
            foreach (var item in listNewItems) {
                // Khởi tạo đối tượng sản phẩm mới
                info = new ItemObject();
                // Gán giá trị vào đối tượng sản phẩm mới
                info.ItemCd = item.ItemCd;
                info.ItemName = item.ItemName;
                info.ItemImage = storageFileCom.GetFileName(
                    Logics.LOCALE_DEFAULT,
                    item.FileCd,
                    false);
                info.Link = W150101Pages.CLN_ITEMS_DETAIL + Chars.FSLASH + item.ItemSearchName;
                // Thêm vào đối tượng kết quả
                listResult.Add(info);
            }
            // Kết quả trả về
            return listResult;
        }
        #endregion
    }
}